package com.JAVA基础.位运算;

public class YSF {

    public static void main(String[] args) {
        int a = 0b01000;//8
        int b = 0b10001;//9

        /**
         与运算符就相当于&&，不同的是，这是按位对比，比如8&9，
         用十进制的眼光去看简直就瞎了，
         8&9其实做的运算就是00001000&00001001，
         然后看到当且仅当两个对应的位置都是1，结果才是1，否则结果为0，
         那么结果就是00001000，也就是8.
         */
        // &同时为1则为1
        System.out.println("a&b计算结果的十进制表示"+(a & b)+",a&b计算结果的二进制表示"+Integer.toBinaryString(a & b));

        /**
         *
         * 或运算符就相当于||， 当然也是按位去或的，
         * 当且仅当两个对应的位置都是0，结果才是0，否则结果是1，
         * 那么8|9就是00001000|00001001，结果就是00001001=9。
         */
        //  |有一个为1则为1
        System.out.println("a|b计算结果的十进制表示"+(a | b)+",a&b计算结果的二进制表示"+Integer.toBinaryString(a | b));

        /**
        * 异或运算是：当运算符两边不同的时候结果为1，两边相同的时候结果为0
        */
        //8^6=1000^0110=1110=14
        System.out.println("a^b计算结果的十进制表示"+(a ^ b)+",a&b计算结果的二进制表示"+Integer.toBinaryString(a ^ b));
        /**
        * 位移运算符我们可以简单的理解为乘除法，像左移是除法，向右移是乘法。
        * 这个符号位是不移动的，注意下。
        * 8>>2大家不要理解为8/2，位移两位就是除以2的2次方也就是8/4.
        * 这里注意9>>1的结果是4，即最低位的1会移没了
        * 9=0b1001>>1=0b100=4
        */
        System.out.println("9右移2位10进制=="+(b >> 2)+",9右移2位2进制=="+Integer.toBinaryString(b >> 2));
        /**
        * >>> 这个应该是无符号的位移运算符
        */
        System.out.println("9右移2位10进制=="+(b >>> 2)+",9右移2位2进制=="+Integer.toBinaryString(b >>> 2));

        /**
         * ~非运算符用符号“~”表示，其运算规律如下：
         */
        System.out.println("~a  a的非运算计算后10进制=="+(~a)+",~a  a的非运算计算后2进制=="+Integer.toBinaryString(~a));
        System.out.println("~0  0的非运算计算后10进制=="+(~0)+",~0  0的非运算计算后2进制=="+Integer.toBinaryString(~0));
        System.out.println("~1  1的非运算计算后10进制=="+(~1)+",~1  1的非运算计算后2进制=="+Integer.toBinaryString(~1));
        System.out.println("~2  2的非运算计算后10进制=="+(~2)+",~2  2的非运算计算后2进制=="+Integer.toBinaryString(~2));
        System.out.println("0b01111111111111111111111111111111的十进制表示"+0b01111111111111111111111111111111);
        System.out.println("0b11111111111111111111111111111111的十进制表示"+0b11111111111111111111111111111111);
    }
}
